home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / gnuish / swalibas / sw_splpe.c < prev    next >
C/C++ Source or Header  |  1990-09-10  |  2KB  |  99 lines

  1. /* sw_splpe.c - spawn a child process.
  2.    Copyright (C) 1990 by Thorsten Ohl, td12@ddagsi3.bitnet
  3.  
  4.    This file is part of SWAPLIB (the library), a library for efficient
  5.    execution of child processes under MS-DOS.
  6.  
  7.    The library is free software; you can redistribute it and/or modify
  8.    it under the terms of the GNU General Public License as published by
  9.    the Free Software Foundation; either version 1, or (at your option)
  10.    any later version.
  11.  
  12.    The library is distributed in the hope that it will be useful,
  13.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.    GNU General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU General Public License
  18.    along with the library; if not, write to the Free Software
  19.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21.    $Header: e:/gnu/swaplib/RCS/sw_splpe.c'v 0.9 90/09/09 21:44:16 tho Stable $
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <errno.h>
  27. #include <stdarg.h>
  28.  
  29. #include "swaplib.h"
  30.  
  31. extern void *xmalloc (size_t size);
  32.  
  33. int
  34. swap_spawnlpe (char *cmd, char *argv0, ...)
  35. {
  36.   char **argv;
  37.   char **envv;
  38.   int i;
  39.   int rc;
  40.   int argc = 1;
  41.  
  42.   va_list ap;
  43.  
  44.  
  45.   if (argv0)
  46.     {
  47.       /* Count the arguments */
  48.  
  49.       va_start (ap, argv0);
  50.       while (va_arg (ap, char *))
  51.     argc++;
  52.  
  53.  
  54.       /* There should be an environment after NULL. */
  55.  
  56.       envv = va_arg (ap, char **);
  57.  
  58.       va_end (ap);
  59.  
  60.       argv = (char **) xmalloc ((argc + 1) * sizeof (char *));
  61.  
  62.  
  63.       /* Set up the pointers. */
  64.  
  65.       argv[0] = argv0;
  66.  
  67.       va_start (ap, argv0);
  68.       for (i = 1; i < argc; i++)
  69.     argv[i] = va_arg (ap, char *);
  70.       va_end (ap);
  71.  
  72.       argv[argc] = NULL;
  73.  
  74.  
  75.       /* Call the workhorse.  */
  76.  
  77.       rc = swap_spawnvpe (cmd, argv, envv);
  78.  
  79.       free (argv);
  80.     }
  81.   else
  82.     {
  83.       /* Invalid arguments.  */
  84.  
  85.       rc = -1;
  86.       errno = EINVAL;
  87.     }
  88.  
  89.   return rc;
  90. }
  91.  
  92. /* 
  93.  * Local Variables:
  94.  * mode:C
  95.  * ChangeLog:ChangeLog
  96.  * compile-command:make
  97.  * End:
  98.  */
  99.